#ifndef READSENSE_ALGO_SDK_H
#define READSENSE_ALGO_SDK_H

#include "rs_algo_common.h"

typedef enum
{
    RS_ERR_LICENSE_APPID_MISMATCH = 2001,    /* APPID不匹配       */
    RS_ERR_LICENSE_INITIAL_FAILURE = 2002,   /* license初始化失败 */
    RS_ERR_LICENSE_VALIDATE_FAILURE = 2003,  /* 不是有效的license */
    RS_ERR_LICENSE_EXPIRED = 2004,           /* license过期       */
} RSErrorCode;

/* 许可授权的初始化参数 */
typedef struct
{
    int licContentLen;                       /* 许可证书长度 */
    const char *licContent;                  /* 许可证书内容 */
    int licAuthContentLen;                   /* 许可授权长度 */
    const char *licAuthContent;              /* 许可授权内容 */
} RSLicInitParams;

/* 人脸检测结果 */
typedef struct
{
    int faceNum;                             /* 检测到的人脸数量 */
    RSRect* faceRectArray;                   /* 检测到的人脸框数组；按每个框的面积大小，从大到小依次排列; 最大检测人脸数目前不能超过10 */
} RSFaceDetectResult;

/* 人形检测结果 */
typedef struct
{
    int bodyNum;                             /* 检测到的人形数量 */
    RSRect* bodyRectArray;                   /* 检测到的人形框数组；按每个框的面积大小，从大到小依次排列; 最大检测人形数目前不能超过10 */
} RSBodyDetectResult;

/* 人脸追踪结果 */
typedef struct
{
    int faceNum;
    RSRect* faceRectArray;
    int* trackID;
} RSFaceTrackResult;

/* 人形追踪结果 */
typedef struct
{
    int bodyNum;
    RSRect* bodyRectArray;
    int* trackID;
} RSBodyTrackResult;

#ifdef __cplusplus
extern "C" 
{
#endif

/* 获取阅面算法SDK的版本号 */
const char* rsGetAlgoSDKVersion();

/* 获取设备码 */
int rsGetAlgoSDKLicenseDeviceContent(const char *licContent, const char **deviceContent);

/* 初始化整个算法SDK的句柄 */
int rsInitAlgoSDK(RSContext *pSDKHandle, RSLicInitParams *pLicInitParam);
/* 释放整个算法SDK的句柄 */
int rsUninitAlgoSDK(RSContext *pSDKHandle);

/* 运行人脸检测 */
int rsRunFaceDetection(RSContext SDKHandle, RSImage* pSrcImg, RSFaceDetectResult* pFaceDetResult);

/* 运行人形检测 */
int rsRunBodyDetection(RSContext SDKHandle, RSImage* pSrcImg, RSBodyDetectResult* pBodyDetResult);

/* 同时检测人脸和人形 */
int rsRunBodyAndFaceDetection(RSContext SDKHandle, RSImage* pSrcImg, RSBodyDetectResult* pBodyDetResult, RSFaceDetectResult* pFaceDetResult);

/* 同时跟踪人脸和人形，人脸和人形各跟各的，互不关联 */
int rsRunBodyAndFaceTracking(RSContext SDKHandle, RSImage* pSrcImg, RSBodyTrackResult* pBodyResult, RSFaceTrackResult* pFaceResult);

/* 清空跟踪状态 */
int rsClearTrackingState(RSContext SDKHandle);

#ifdef __cplusplus
}
#endif

#endif
